#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
/*
//题目一： 求两个int（32位）整数m和n的二进制表达中，有多少个位(bit)不同?
int NumberOf1(int n)
{
	int count = 0;
	while (n)  // 首先看n是不是零
	{
		if (n % 2 == 1) //%2之后得到的一个数字是1的时候

		{
			count++; //说明二进制数中有1，计数器加一
		}
		n /= 2; //去掉一位 算下一位（最终变成零）
	}
	return count;
}

int main()
{

	int m = 0;
	int n = 0;
	int i = 0;
	int count=0;
	scanf("%d %d", &m, &n);
	//方法二：
	int ret = m ^ n;   //相同为0，相异为1
	//统计一下ret的2进制中有几个1，就说明m和n的二进制位中有几个位不同
	count = NumberOf1(ret);
	printf("%d\n", count);

	// 方法一： 一个一个 对比
	//for ( i = 0; i < 32; i++)
	//{
	//	if (((m  >> i) & 1) != ((n >> i) & 1))
	//	{
	//		count++;
	//	}
	//}
	//printf("%d\n", count);
	return 0;
}
 */


//1.表达式求值先有是否存生整形提升或算术转换，再进行计算
//2.表达式真正计算的时候先看相邻操作符的优先级决定先算谁
//3.相邻操作符的优先级相同的情况下，看操作符的结合性决定计算顺序
//4.只要有了优先级和结合性，  表达式依然可能不求出唯一的值


//A.指针是变量，用来存放地址
//B.指针变量中存的有效地止可以唯一指向内存中的一块区域
//C.野指针  不可以正常使用
//D.局部指针变量不初始化就是野指针

//以下系统中，int类型占几个字节，指针占几个字节，
//操作系统可以使用的最大内存空间是多大：
//32位下:4, 4, 2 ^ 32    64位下 : 4, 8, 2 ^ 64

/*
 // 题目二：获取并打印n的2进制中的奇数位和偶数位
int main() 
{
	int n = 0;
	scanf("%d",  & n);
	//10的二进制 （32位）：
	//0000000000000000000000000000000001010 
	int i =0;
	//打印偶数位
	for ( i = 31; i >= 1; i -= 2)
	{
		printf("%d", (n >> i) & 1);
	}
	printf("\n");
	//打印奇数位
	for (i = 30; i >= 0; i -= 2)
	{
		printf("%d", (n >> i) & 1);
	}
	return 0;
}
*/

/*
// 题目三：交换两个变量（不创建临时变量）
int main()
{
	int a = 10;
	int b = 20;
	a = a ^ b;
	b=a^ b; // a = a ^ b  , b=b =>  a^b ^b  => a ^ 0 => a  异或
	a=a^ b;  //  a = a ^ b , b=a =>  a^b^a   => b ^ 0 => b
	printf("a=%d b=%d", a, b);
	return 0;
}
*/

int main()
{                                 //小端存储：低地址存储数据的低位
	int arr[] = { 1,2,3,4,5 }; //数组内容 小端存储   四字节存一个数
	                    // 01 00 00 00; 02 00 00 00;03 00 00 00; 04 00 00 00;05 00 00 00;
	short* p = (short*)arr;   // short型 指针 解引用  访问一个字节
	int i = 0;
	for ( i = 0; i < 4; i++)
	{
		*(p + i) = 0;  // 每循环一次 访问两个字节 
	}
	for ( i = 0; i < 5; i++)
	{
		printf("%d", arr[i]);  //打印的结果就是 0 0 3 4 5
	}
	return 0; 
}